JaeHyeonKim19

함수형프로그래밍 개념잡기

2020-02-12


새로 투입된 프로젝트가 함수형프로그래밍과 객체지향이 혼용된 형태를 띄고 있다...
객체지향은 접해본적 있지만 함수형프로그래밍은 이름만 들어보고 따로 공부를 해본 적은 없다.
하지만 프로젝트를 이해하기 위해서는 함수형프로그래밍에대한 이해가 필요함을 느꼈고 이 게시물을 통해 깊진 않더라도 개념을 잡아보고자 한다.

함수형 프로그래밍?

먼저 얄팍한 코딩사전님의 함수형 프로그래밍이 뭔가요? 영상을보며 개념을 잡자.

  • 영상 요약(요약에는 영상의 많은 설명을 삭제하고 목차만 명시한 것이라 요약만 보는 것은 절대로 금한다.)

    • 객체지향과 아주 대립하는 개념은 아니다!
    • 함수형 프로그래밍은 아주 이질적이라 함수형 프로그래밍적으로 사고하는 연습이 필요하다.
    • 함수형 프로그래밍을 공장에 비유하여 설명하는데 함수형 프로그래밍 공장은 몇 가지 특징이 있다.
    • 인풋과 아웃풋이 있음
    • 외부환경으로부터 철저히 독립적이다.(순수 함수)

      • 함수형 프로그래밍이 주목받게된 이유 중 하나. 부작용으로부터 비교적 자유롭다.
    • 함수형 프로그래밍의 특징을 몇 가지 알아보자.
    • 함수형 프로그래밍은 선언형이다.

      • '이거'는 '이거'다.
    • 함수도 '값'이다.
    • 고계함수
    • 커링

      • 일부 인자를 넣어서 나머지 인자를 받는 다른 함수를 만드는 기법
    • 함수 컴비네이터
    • 더 고급스러운 개념을 알고싶으면 스코프, call-by-name, 모나드 등 필요한 개념을 검색해보자.

이제 개념이 잡혔으니 조금 더 상세하게 알고싶은 개념들을 살펴보자. 현재 프로젝트에서는 파이프개념을 많이 사용하고있기 때문에 파이프를 한번 살펴보자.

Pipe

함수형 프로그래밍-pipe

  • Pipe: 파이프는 단방향 통신을 위한 용도로 사용된다. 하나의 파이프는 그 이전 파이프에서 전달된 결과를 파라미터로 삼아 또 다른 결과를 내놓는다.
  • 순수함수

    1. 같은 입력 값에선 같은 반환 값을 보장한다.
    2. 함수 외부 스코프의 그 어떠한 변수의 값도 바꾸지 않는다.
  • 예제 코드는 위 링크에 접속해서 블로그의 코드를 보도록하자. 그 코드를 보고 든 생각은 함수 하나의 기능이 많아 분리하되 하나의 순수 함수처럼 동작하게 하고 싶을 때 파이프를 이용해서 연결하면 되겠다는 생각이 들었다. 처음에는 파이프가 어떠한 특별한 기능을 해주는 줄 알았는데 그렇다기 보다는 파이프 이름 그대로 단순히 연결해주는 기능을 하는 것 같다. 물론 추가적인 기능들이 있는지는 추가적인 검색이 필요할 듯 하다.